Google Guava Collections(简称 Guava)是Google推出的Java类库,针对JDK做了很多增强和扩展,例如Map的K-V转换,ConcurrentHashMap的构造等。可以有效使你的代码量更简洁高效。
Guava Cache是一个全内存的本地缓存实现,提供了线程安全的实现机制。Guava Cache本身是一个Map
官方注解中提出在以下需求中可能会使用到它:
- automatic loading of entries into the cache
- least-recently-used eviction when a maximum size is exceeded
- time-based expiration of entries, measured since last access or last write
- keys automatically wrapped in WeakReference
- values automatically wrapped in WeakReference or SoftReference soft
- notification of evicted (or otherwise removed) entries
- accumulation of cache access statistics
自动装载,基于时间过期,最少使用排除等,恰好符合最近项目中需要解决一个性能的小问题需求。
Guava提供两种类型缓存:LoadingCache&Cache。LoadingCache可以当entry不存在时加载entry,Cache不会自动加载entry。
private LoadingCache<String, Map> topic_cache_map = CacheBuilder.newBuilder()
.maximumSize(1000)
.expireAfterWrite(5, java.util.concurrent.TimeUnit.MINUTES)
.build(
new CacheLoader<String, Map>() {
public Map load(String key) throws Exception {
if("-1".equals(key)) {
return getLastTopic();
}else{
return getTopic(key);
}
}
});
设置最大数量1000,五分钟过期时间。 直观的效果体现请参照下图
使用Guava Cache之前
使用Guava Cache之后
可以看出反馈时间长的请求数下降了非常的多,响应平均值提高了八倍左右,效果非常理想。
测试参数:10秒内并发1000用户,测试工具采用Gatling,请参照上一篇文章「性能测试神器」